﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace QldtSdh.GUI.DaoTao
{
    using BLL;
    using DAL;
    using DAL.Models;
    using GUI.Utils;
    using QldtSdh.GUI.Common;
    using QldtSdh.Utils;

    public partial class FormDangKyHocPhan : QldtSdh.GUI.Common.BaseDialog
    {
        private LopHocPhan _LopHocPhan;
        private HocPhan _HocPhan;
        private HocVien _HocVien = null;

        public FormDangKyHocPhan(LopHocPhan lopHocPhan)
        {
            InitializeComponent();

            _LopHocPhan = lopHocPhan;
            lblMessage.Text = string.Format("Đăng ký vào lớp học phần [{0}]\n\nLưu ý: Việc học thay thế phải có sự đồng ý và xác nhận của đơn vị phụ trách chuyên môn.",
                lopHocPhan.TenLopHocPhanFull);
            var hocPhan = BizHocPhan.GetByID(lopHocPhan.MaHocPhanGUID);
            _HocPhan = hocPhan;
            txtHocPhan.Text = string.Format("[{0}] {1} ({2}TC)", hocPhan.MaHocPhan, hocPhan.TenHocPhan, hocPhan.SoTinChi);
            //chkHocThayThe.Text = string.Format("Học thay thế học phần [{0}]-{1} cho học phần:", hocPhan.MaHocPhan, hocPhan.TenHocPhan);
            txtGhiChu.Text = string.Format("Đăng ký học phần tại Phòng Đào tạo Sau đại học vào lúc {0}", System.DateTime.Now.ToString("dd/MM/yyyy HH:mm"));

            UpdateGuiByHocVien();

            nudLanHoc.Value = 1;
        }

        private void UpdateGuiByHocVien()
        {
            if (_HocVien == null)
            {
                chkHocThayThe.Enabled = false;
                chkHocThayThe.Checked = false;
                cbxHocPhanThayThe.Enabled = false;
            }
            else
            {
                // Tìm danh sách học phần mà _HocPhan có thể thay thế được
                var lstHocPhan = BizDaoTao.GetListHocPhanThayTheCho(hocPhan: _HocPhan, cuaHocVien: _HocVien);
                bsHocPhanThayThe.DataSource = lstHocPhan;
                cbxHocPhanThayThe.DisplayMember = "Description";
                cbxHocPhanThayThe.DataSource = bsHocPhanThayThe;

                if (bsHocPhanThayThe.Count > 0)
                {
                    chkHocThayThe.Enabled = true;
                    cbxHocPhanThayThe.Enabled = true;
                    UpdateGuiByHocThayTheStatus();
                }
                else
                {
                    chkHocThayThe.Enabled = false;
                    cbxHocPhanThayThe.Enabled = false;
                    chkHocThayThe.Checked = false;
                }
            }
        }

        private void chkHocThayThe_CheckedChanged(object sender, EventArgs e)
        {
            if (chkHocThayThe.Focused)
                UpdateGuiByHocThayTheStatus();
        }

        private void UpdateGuiByHocThayTheStatus()
        {
            cbxHocPhanThayThe.Enabled = chkHocThayThe.Checked;
        }

        private void lblChonHocVien_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            var frm = new Common.FormChonHocVien();
            if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                _HocVien = frm.SelectedHocVien;
                txtHocVien.Text = string.Format("[{0}] {1} {2}", _HocVien.MaHocVien, _HocVien.HoDem, _HocVien.Ten);
                UpdateGuiByHocVien();
            }
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            HocVien hocVien = _HocVien;
            if (hocVien == null)
            {
                DialogUtils.ShowErrorWithDefaultTitle("Bạn phải chọn học viên để đăng ký");
                return;
            }

            HocPhan hocPhanThayThe = null;
            if (chkHocThayThe.Checked)
            {
                if (bsHocPhanThayThe.Current != null)
                    hocPhanThayThe = bsHocPhanThayThe.Current as HocPhan;
                if (hocPhanThayThe == null)
                {
                    DialogUtils.ShowErrorWithDefaultTitle("Bạn phải chọn học phần được thay thế");
                    return;
                }
            }

            try
            {
                BizLopHocPhan.DangKyHocVien(
                    hocVien: hocVien,
                    vaoLopHocPhan: _LopHocPhan,
                    hocThayThe: chkHocThayThe.Checked,
                    hocPhanThayThe: hocPhanThayThe,
                    lanHoc: (int)nudLanHoc.Value,
                    ghiChu: txtGhiChu.Text.Trim());
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.Close();
            }
            catch (Exception exc)
            {
                DialogUtils.ShowErrorWithDefaultTitle("Không thể đăng ký học viên {0} vào lớp học phần {1} được.\nChi tiết lỗi: {2}",
                    hocVien._Description, _LopHocPhan.TenLopHocPhanFull, exc.Message);
            }

        }
    }
}
